/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.dao;

import br.com.folha.entity.Unidade;
import br.com.folha.utilidades.HibernateUtil;
import java.io.Serializable;
import java.util.List;
import javax.persistence.NoResultException;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;

/**
 *
 * @author marceloml
 */
public class UnidadeDao implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    private Long resultado;
    
    @Autowired
    private SessionFactory sessionFactory;
    
    public Long consultaUnidade(String nome) {
        Session sessao = HibernateUtil.getSessionFactory();
        //Boolean resultado;
        Query query  = sessao.createQuery("select count(*) as contador from Unidade where nome=:pnome");
        query.setParameter("pnome",nome);
            try{
             resultado=(Long) query.list().get(0);
            }catch(NoResultException e){
                resultado=null;
            }finally{
                sessao.close();
            }
            return resultado;       
    }
      
    /*
     * Esta consulta será filtrada de acordo com as unidades que o usuário
     * logado pertença
     */
    public List<Unidade> listaUnidade(Object t, java.util.List unidades) {
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(t.getClass());         
        criteria.add(Restrictions.in("id", unidades));
        List lista = criteria.list();
        sessao.close();
        return lista;      
    }    

    public Unidade consultaUnidadePorId(Unidade t, Unidade get) {
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("id", get.getId()));          
        List lista = criteria.list();
        sessao.close();
        return t;           
    }
    
    public List listaUsuarioUnidade(Unidade t){
        Session sessao = HibernateUtil.getSessionFactory();        
        Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("id", t.getId()));
        criteria.createAlias("usuarios", "u");                        
                        
        List retorno = criteria.list();
        sessao.close();
        return retorno;                        
    }    
    
    public List listaProfessorUnidade(Unidade t){
        Session sessao = HibernateUtil.getSessionFactory();        
        Criteria criteria = sessao.createCriteria(t.getClass()).add(Restrictions.eq("id", t.getId()));
        criteria.createAlias("professores", "u");                        
                        
        List retorno = criteria.list();
        sessao.close();
        return retorno;                        
    }    
    
 public Unidade getById(int id)
 { 
    Session sessao = HibernateUtil.getSessionFactory();
    Query query = sessao.createQuery("FROM Unidade WHERE id = :id");               
    query.setParameter("id", id);        
     
    return (Unidade) query.uniqueResult();
 }
    
    
}